import numpy as np
import matplotlib.pyplot as plt
from sympy import symbols, limit, oo

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

x = symbols('x')
f = 1 / x

# 计算极限
limit_right = limit(f, x, 0, dir='+')
limit_left = limit(f, x, 0, dir='-')
print("极限分析结果：")
print(f"当 x→0⁺ 时，极限为：{limit_right}")
print(f"当 x→0⁻ 时，极限为：{limit_left}")

# 分别绘制左右两侧的图像，避免在x=0处连接
x_left = np.linspace(-5, -0.1, 500)   # 左侧定义域
x_right = np.linspace(0.1, 5, 500)    # 右侧定义域

y_left = 1 / x_left
y_right = 1 / x_right

plt.figure(figsize=(10, 6))

# 分别绘制左右两侧的曲线
plt.plot(x_left, y_left, 'b-', label='y = 1/x', linewidth=2)
plt.plot(x_right, y_right, 'b-', linewidth=2)

# 绘制渐近线
plt.axvline(0, color='r', linestyle='--', alpha=0.7, label='铅直渐近线 x=0')
plt.axhline(0, color='g', linestyle='--', alpha=0.7, label='水平渐近线 y=0')

plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('反比例函数的渐近线分析', fontsize=14)
plt.grid(True, alpha=0.3)
plt.xlim(-5, 5)
plt.ylim(-10, 10)
plt.tight_layout()
plt.show()